iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
自我挑戰組

菜雞的JAVA日記系列 第 29

DAY29-JAVA的for-each、Iterator和ListIterator

  • 分享至 

  • xImage
  •  

集合的特性
可以依照集合是否具有「自動排序性」、「重複性」、「次序性」及「使用關鍵值」,為資料選擇適合儲存的集合物件:
(1)自動排序性:自動將加入集合的元素做遞增或遞減的排序。
(2)重複性:集合中的元素是否允許存在相同的物件。
(3)次序性:元素是否會依加入集合時的順序依次排序。
(4)使用關鍵值:利用關鍵值存放元素,一個關鍵值(key)對照一個對應值(value),因此關鍵值的內容必須是唯一存在。

for-each迴圈

for(元素型態 迴圈控制變數 : 集合或陣列名稱){
//迴圈主體;

for-each迴圈控制變數的形態要與集合或陣列裡的元素型態相同。

...
for(String i : test)  //走訪
    System.out.println(i+" ");

使用for-each迴圈時要注意以下幾點:
(1)只能從頭開始訪問每個元素,不能從集合或是陣列尾端向前走訪。
(2)只能取出集合或陣列裡的元素而不能置換它。
(3)for-each迴圈裡面的變數是區域變數。
(4)只能適用於JAVA 5.0以後的版本。

使用for-each迴圈可以走訪集合內的元素,但若是要使用更多存取的集合的功能,如取出子及何等,就必須靠JAVA提供的其他介面,如:Iterator、ListIterator等介面完成。

Iterator走訪元素
Iterator物件只能從頭讀到尾,同時當我們已讀取過資料,就不能將元素從頭再讀取一次。

Iterator itr = tset.iterator();

用tset呼叫iterator(),以便取得Iterator物件itr。

...
TreeSet<String> tset = new TreeSet<String>();
...
Iterator<String> itr = tset.iterator();  //取得iterator物件
while(itr.hasNext()){  //走訪元素
    str = itr,next();
    System.out.println(str+" ");  //印出元素內容
}
itr.remove();  //刪除最後讀取的元素
System.out.println("TreeSet: "+tset);

利用Iterator走訪物件最大的好處是,它可以用統一的方式走訪不同的集合裡的元素。而且Iterator物件的讀取是單向且只能讀一次。

ListIterator走訪元素
ListIterator物件的走訪則可以是雙向的,有就是說可以從頭到尾(正向),也可以從最後一個元素逆向讀取到第一個元素(逆向)。

ListIterator litr = llist.listIterator();

...
LinkedList<Integer> llist = new LinkedList<Integer>();
llist.add(5);  //加入元素
llist.add(7);
llist.add(10);
llist.add(13);
ListIterator<Integer> litr1 = llist.listIterator();
while(litr1.hasNext())  //正向走訪元素
    System.out.println(litr.next()+" ");  //印出元素內容
ListIterator<Integer> litr2 = llist.listIterator(llist.size());
while(litr2.hasPrevious())  //反向走訪元素
    System.out.println(litr2.previous()+" ");  //印出元素內容

當hasNet()或hasPrevious()傳回值為false時,該ListIterator物件也就沒有任何的可用之處,除非再重新取得ListIterator物件。

星期五啦啦啦啦啦啦~~
10月的天秤座朋友們生日到來了!!!:))
See U tomorrow~~

菜鳥工程師的體脂肪

菜鳥工程師也有分享食記,歡迎大家追蹤喔~~
https://instagram.com/engineer_bodyfat?utm_medium=copy_link


上一篇
DAY28-JAVA的泛型
下一篇
DAY30-JAVA的Set、List、Map介面
系列文
菜雞的JAVA日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言